static void __make_page_readonly(unsigned long va)
{
unsigned long addr;
- pte_t *pte;
+ pte_t pte, *ptep;
unsigned long *page = (unsigned long *) init_level4_pgt;
addr = (unsigned long) page[pgd_index(va)];
addr = page[pmd_index(va)];
addr_to_page(addr, page);
- pte = (pte_t *) &page[pte_index(va)];
- xen_l1_entry_update(pte, (*(unsigned long*)pte) & ~_PAGE_RW);
+ ptep = (pte_t *) &page[pte_index(va)];
+ pte.pte = (ptep->pte & ~_PAGE_RW);
+ xen_l1_entry_update(ptep, pte);
__flush_tlb_one(addr);
}
static void __make_page_writable(unsigned long va)
{
unsigned long addr;
- pte_t *pte;
+ pte_t pte, *ptep;
unsigned long *page = (unsigned long *) init_level4_pgt;
addr = (unsigned long) page[pgd_index(va)];
addr = page[pmd_index(va)];
addr_to_page(addr, page);
- pte = (pte_t *) &page[pte_index(va)];
- xen_l1_entry_update(pte, (*(unsigned long*)pte)| _PAGE_RW);
+ ptep = (pte_t *) &page[pte_index(va)];
+ pte.pte = (ptep->pte | _PAGE_RW);
+ xen_l1_entry_update(ptep, pte);
__flush_tlb_one(addr);
}
*/
void make_page_readonly(void *va)
{
- pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte;
+ pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep;
unsigned long addr = (unsigned long) va;
if (!init_mapping_done) {
pgd = pgd_offset_k(addr);
pud = pud_offset(pgd, addr);
pmd = pmd_offset(pud, addr);
- pte = pte_offset_kernel(pmd, addr);
- xen_l1_entry_update(pte, (*(unsigned long*)pte)&~_PAGE_RW);
+ ptep = pte_offset_kernel(pmd, addr);
+ pte.pte = (ptep->pte & ~_PAGE_RW);
+ xen_l1_entry_update(ptep, pte);
__flush_tlb_one(addr);
}
void make_page_writable(void *va)
{
- pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte;
+ pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep;
unsigned long addr = (unsigned long) va;
if (!init_mapping_done) {
pgd = pgd_offset_k(addr);
pud = pud_offset(pgd, addr);
pmd = pmd_offset(pud, addr);
- pte = pte_offset_kernel(pmd, addr);
- xen_l1_entry_update(pte, (*(unsigned long*)pte)|_PAGE_RW);
+ ptep = pte_offset_kernel(pmd, addr);
+ pte.pte = (ptep->pte | _PAGE_RW);
+ xen_l1_entry_update(ptep, pte);
__flush_tlb_one(addr);
}
if (!pte_none(*pte) &&
pte_val(*pte) != (pte_val(new_pte) & __supported_pte_mask))
pte_ERROR(*pte);
- xen_l1_entry_update(pte, new_pte.pte);
+ xen_l1_entry_update(pte, new_pte);
/*
* It's enough to flush this one mapping.
new_pte = pfn_pte_ma(phys >> PAGE_SHIFT, prot);
pte = pte_offset_kernel(pmd, vaddr);
- if (!pte_none(*pte) &&
- pte_val_ma(*pte) != (pte_val_ma(new_pte) & __supported_pte_mask))
- pte_ERROR(*pte);
-
/*
* Note that the pte page is already RO, thus we want to use
* xen_l1_entry_update(), not set_pte().
*/
xen_l1_entry_update(pte,
- (pfn_pte_ma(phys >> PAGE_SHIFT, prot).pte));
+ pfn_pte_ma(phys >> PAGE_SHIFT, prot));
/*
* It's enough to flush this one mapping.
__pgprot(_KERNPG_TABLE | _PAGE_USER));
pte = (pte_t *) &pte_page[pte_index(va)];
- xen_l1_entry_update(pte, new_pte.pte);
+ xen_l1_entry_update(pte, new_pte);
extended_size += PAGE_SIZE;
}
}
extern inline int pud_present(pud_t pud) { return !pud_none(pud); }
#ifdef CONFIG_SMP
-#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval).pte)
+#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval))
#else
-#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval.pte))
+#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval))
#if 0
static inline void set_pte(pte_t *dst, pte_t val)
{
pte_t pte = *ptep;
int ret = pte_dirty(pte);
if (ret)
- xen_l1_entry_update(ptep, pte_mkclean(pte).pte);
+ xen_l1_entry_update(ptep, pte_mkclean(pte));
return ret;
}
pte_t pte = *ptep;
int ret = pte_young(pte);
if (ret)
- xen_l1_entry_update(ptep, pte_mkold(pte).pte);
+ xen_l1_entry_update(ptep, pte_mkold(pte));
return ret;
}